'use strict';
const db = uniCloud.database();
const crypto = require('crypto');

// 密码加密函数
function encryptPassword(password) {
	return crypto.createHash('sha256').update(password).digest('hex');
}

// 验证用户名格式
function validateUsername(username) {
	const usernameRegex = /^[a-zA-Z0-9_]{3,20}$/;
	return usernameRegex.test(username);
}

// 验证密码强度
function validatePassword(password) {
	return password.length >= 6 && password.length <= 20;
}

// 验证邮箱格式
function validateEmail(email) {
	const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
	return emailRegex.test(email);
}

exports.main = async (event, context) => {
	const { username, password, confirmPassword, email, nickname } = event;
	
	// 参数验证
	if (!username || !password || !confirmPassword) {
		return {
			code: 400,
			message: '用户名、密码和确认密码不能为空'
		};
	}
	
	// 验证用户名格式
	if (!validateUsername(username)) {
		return {
			code: 400,
			message: '用户名只能包含字母、数字和下划线，长度3-20个字符'
		};
	}
	
	// 验证密码
	if (!validatePassword(password)) {
		return {
			code: 400,
			message: '密码长度必须在6-20个字符之间'
		};
	}
	
	// 验证密码确认
	if (password !== confirmPassword) {
		return {
			code: 400,
			message: '两次输入的密码不一致'
		};
	}
	
	// 验证邮箱格式（如果提供）
	if (email && !validateEmail(email)) {
		return {
			code: 400,
			message: '邮箱格式不正确'
		};
	}
	
	try {
		const userCollection = db.collection('user');
		
		// 检查用户名是否已存在
		const existingUser = await userCollection
			.where({
				username: username
			})
			.get();
		
		if (existingUser.data.length > 0) {
			return {
				code: 409,
				message: '用户名已存在'
			};
		}
		
		// 检查邮箱是否已存在（如果提供）
		if (email) {
			const existingEmail = await userCollection
				.where({
					email: email
				})
				.get();
			
			if (existingEmail.data.length > 0) {
				return {
					code: 409,
					message: '邮箱已被注册'
				};
			}
		}
		
		// 加密密码
		const encryptedPassword = encryptPassword(password);
		
		// 创建新用户（只能注册为普通用户）
		const newUser = {
			username: username,
			password: encryptedPassword,
			role: 'user', // 强制设置为普通用户
			nickname: nickname || username,
			email: email || '',
			avatar: '',
			status: 'active',
			register_date: Date.now(),
			register_ip: context.CLIENTIP,
			last_login_date: null,
			last_login_ip: ''
		};
		
		// 插入用户数据
		const result = await userCollection.add(newUser);
		
		if (result.id) {
			return {
				code: 0,
				message: '注册成功',
				data: {
					userId: result.id,
					username: username,
					role: 'user'
				}
			};
		} else {
			return {
				code: 500,
				message: '注册失败，请稍后重试'
			};
		}
		
	} catch (error) {
		console.error('注册错误:', error);
		return {
			code: 500,
			message: '服务器内部错误'
		};
	}
};